return i en try {}

Tags:    java

Hej...
Jeg er en nybegynder i Java, men prøver nu at lave noget netværkshalløj, læst i en artikel her på sitet.

Jeg kunne godt tænke mig at få returneret værdien i try{} sådan at jeg kan bruge den i min GUI.. er det mig der griber det forkert an, eller?



Min kode er her, vigtige dele af min kode er markeret således: // ********

Alt der er gennemstreget mener jeg ikke er vigtigt..

Dette er min klient:


import java.net.Socket;
import java.net.UnknownHostException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class EchoClient {

public void connect()
{
Socket sock=null;
try {
sock = new Socket("localhost", 10000); //Opret forbindelse til localhost:10000
} catch (UnknownHostException uhe) {
System.out.println("[client] Ukendt værtsnavn");
uhe.printStackTrace();
System.exit(1);
} catch (IOException ioe) {
System.out.println("[client] Kunne ikke oprette forbindelsen");
ioe.printStackTrace();
System.exit(1);
}


}

public String getInfo()
{



try {

Socket sock=null;
sock = new Socket("localhost", 10000); //Opret forbindelse til localhost:10000
InputStream in = sock.getInputStream(); //Stream til indkommende data
OutputStream out = sock.getOutputStream(); //Stream til udgående data
out.write("Dette er en test".getBytes());

int MAX_SIZE = 16384; //16k
byte[] buffer = new byte[MAX_SIZE];
String str = new String("");
while (true) {
int read = in.read(buffer, 0, MAX_SIZE); //læs op til MAX_SIZE tegn.
String fisse = new String(buffer, 0, read); //************
System.out.println("Modtaget: "+new String(buffer, 0, read));

/* Hop ud af while-løkken hvis vi har læst mindre end MAX_SIZE */
if (read < MAX_SIZE) {

break;

}
return fisse; //************
}
} catch (IOException e) {
e.printStackTrace();
}


}


public static void main(String[] args) {

Socket sock=null;
try {
sock = new Socket("localhost", 10000); //Opret forbindelse til localhost:10000
} catch (UnknownHostException uhe) {
System.out.println("[client] Ukendt værtsnavn");
uhe.printStackTrace();
System.exit(1);
} catch (IOException ioe) {
System.out.println("[client] Kunne ikke oprette forbindelsen");
ioe.printStackTrace();
System.exit(1);
}

/* Nu har vi en forbindelse til fjerncomputeren */

try {
InputStream in = sock.getInputStream(); //Stream til indkommende data
OutputStream out = sock.getOutputStream(); //Stream til udgående data
out.write("Dette er en test".getBytes());

int MAX_SIZE = 16384; //16k
byte[] buffer = new byte[MAX_SIZE];
String str = new String("");
while (true) {
int read = in.read(buffer, 0, MAX_SIZE); //læs op til MAX_SIZE tegn.

System.out.println("Modtaget: "+new String(buffer, 0, read));

/* Hop ud af while-løkken hvis vi har læst mindre end MAX_SIZE */
if (read < MAX_SIZE) {
break;
}
}
sock.close();
} catch (IOException e) {
e.printStackTrace();
}

}
}





4 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
For at være mere præcis så kræver Java compileren at hvis en metode har retur type forskellig fra void, så skal alle veje igennem metodens krop ende i en return statement der returnerer noget med den korrekte type.

I dit tilfælde kan du enten lave en finally clause på din try-catch hvor du returnerer en String, men det er sådan set også nok at indsætte en return statement i din catch eller i slutningen af metoden (formålet med finally er at sikre at en stump bliver kørt ligegyldig om der blev kastet en exception i den foregående try-catch blok eller ej). Endelig kan du også kaste en ny exception i catch, og derved undgå en return statement.



BTW så undskylder jeg for mit sprogbrug, jeg er bare frustreret og når jeg er frustreret, sker dette..



Hvis du modererer din kode, skal jeg nok læse den igen og kommentere på den.



Gæt:

Du kan ikke sidst i en try skrive return, uden at have en return hvis det skulle fejle, så return i catch også - ved ikke om der som i C# er en finally der afvilkes ligegodt hvad.

Ellers bare return null efter din try catch

/J



t